//封装ajax函数
//兼容GET请求和POST请求
function Ajax($method,$url,$params,$callBack){
    //$method   请求方式
    //$url      请求地址
    //$params   请求参数（统一传JSON对象）
    //$callBack 请求回调（使用这个ajax函数的时候需要传一个function，用来接收异步数据）



    let xhr = new XMLHttpRequest();
    //处理GET和POST
    //GET的参数存在URL上
    //POST的参数存在send()中


    //处理GET参数
    let str = "?";
    if($params){
        for(let k in $params){
            str += `${k}=${$params[k]}&`;
        }
    }
    
    //返回结构，str = "?name=hy&id=1&"


    //统一请求方式转大写
    if($method.toUpperCase() === "GET"){
        //GET请求
        xhr.open($method,$url + str.slice(0,-1));
        xhr.send()
    }else{
        //POST请求或其他请求
        xhr.open($method,$url);
        //设置请求头格式
        xhr.setRequestHeader("Content-Type","application/json");
        //请求参数为JSON字符串发送到后端
        xhr.send(JSON.stringify($params))
    }



    //监听xhr的请求状态
    xhr.addEventListener("readystatechange",function(){
        if(xhr.readyState === 4){
            if(xhr.status === 200){
                //代表成功（异步请求数据）
                //xhr.response
                //数据响应成功之后立马执行回调函数，并且将xhr.response当做是函数的实参
                $callBack && $callBack(JSON.parse(xhr.response));
            }else{
                //否则请求错误，如  404、403、401、400
                //404  接口错误，不存在接口
                //403  缺少访问权限
                //401  未登录，缺少令牌
                //400  缺少必要参数
                //500+ 服务问题，与前端无关
                $callBack && $callBack(JSON.parse(xhr.response));
            }
        }
    })
}